home *** CD-ROM | disk | FTP | other *** search
/ Revolution - Das Atari CD Magazin 1997 / Revolution - Das Atari CD Magazin 1.iso / software / anwendng / utility / cbhd502 / src / m2 / scsidefs.d < prev    next >
Text File  |  1997-01-21  |  13KB  |  303 lines

  1. DEFINITION MODULE ScsiDefs;
  2. (****************************************************************************
  3.  *
  4.  * Definitionen für den SCSI-Treiber
  5.  *
  6.  *  (c) 1995 Steffen Engel
  7.  *
  8.  * $Source: E:\HM2\LIB\se\rcs\scsidefs.d,v $
  9.  *
  10.  * $Revision: 1.2 $
  11.  *
  12.  * $Author: S_Engel $
  13.  *
  14.  * $Date: 1996/02/03 19:31:28 $
  15.  *
  16.  * $State: Exp $
  17.  *
  18.  *****************************************************************************
  19.  * History:
  20.  *
  21.  * $Log: scsidefs.d,v $
  22.  * Revision 1.2  1996/02/03  19:31:28  S_Engel
  23.  * Kleine Anpassungen
  24.  *
  25.  * Revision 1.1  1995/11/13  17:37:00  S_Engel
  26.  * Initial revision
  27.  *
  28.  *
  29.  *
  30.  *
  31.  ****************************************************************************)
  32.  
  33.  
  34. (*$R2+ D2/A2 sichern        *)
  35. (*$K+  Aufrufer räumt Stack *)
  36. (* Damit sind die Parameter wie PureC cdecl *)
  37.  
  38. FROM SYSTEM IMPORT ADDRESS;
  39.  
  40.  
  41. TYPE
  42.   WORD            = SHORTINT;         (* 16 Bit signed    *)
  43.   UWORD           = SHORTCARD;        (* 16 Bit unsigned  *)
  44.   LONG            = LONGINT;          (* 32 Bit signed    *)
  45.   ULONG           = LONGCARD;         (* 32 Bit unsigned  *)
  46.   BYTE            = [-128..127];      (* 8 Bit signed     *)
  47.   UBYTE           = [0..255];         (* 8 Bit unsigned   *)
  48.   DLONG           = RECORD            (* 64 Bit unsigned  *)
  49.                       hi, lo : LONGCARD;
  50.                     END;
  51.  
  52. (*
  53.  * Standardtypen und Übergabekonventionen bei Modula-2:
  54.  *
  55.  * BITSET : 16 Bit Bitvektor
  56.  * ADDRESS : Zeiger void *
  57.  *
  58.  * Parameterübergabe VAR entspricht Zeigerübergabe:
  59.  *  PROCEDURE call(VAR val : SHORTCARD);
  60.  *  void cdecl call(UWORD *val);
  61.  *
  62.  * Übergabe VAR (*$RO*) entspricht const *
  63.  *  PROCEDURE call(VAR (*$RO*)val : SHORTCARD);
  64.  *  void cdecl call(const UWORD *val);
  65.  *
  66.  * VAR STRING ist char *
  67.  *  PROCEDURE call(VAR str : STRING);
  68.  *  void cdecl call(char *str);
  69.  *
  70.  * Parameterübergabe entspricht cdecl:
  71.  *  PROCEDURE call(par1, par2, par3 : SHORTCARD);
  72.  *  void cdecl call(UWORD par1, UWORD par2, UWORD par3);
  73.  *
  74.  * Prozedurergebnis immer in D0
  75.  *
  76.  *)
  77.  
  78. CONST
  79.  
  80.   ScsiCallVersion = 00100H;   (* Version = 1.00 *)
  81.  
  82.  
  83.   (*--- Werte für Fehlerart (ScsiErrorCode) *)
  84.   NOSCSIERROR     =   0; (* Kein Fehler                                   *)
  85.   SELECTERROR     =  -1; (* Fehler beim Selektieren                       *)
  86.   STATUSERROR     =  -2; (* Default-Fehler                                *)
  87.   PHASEERROR      =  -3; (* ungültige Phase                               *)
  88.   BSYERROR        =  -4; (* BSY verloren                                  *)
  89.   BUSERROR        =  -5; (* Busfehler bei DMA-Übertragung                 *)
  90.   TRANSERROR      =  -6; (* Fehler beim DMA-Transfer (nichts übertragen)  *)
  91.   FREEERROR       =  -7; (* Bus wird nicht mehr freigegeben               *)
  92.   TIMEOUTERROR    =  -8; (* Timeout                                       *)
  93.   DATATOOLONG     =  -9; (* Daten für ACSI-Softtransfer zu lang           *)
  94.   LINKERROR       = -10; (* Fehler beim Senden des Linked-Command (ACSI)  *)
  95.   TIMEOUTARBIT    = -11; (* Timeout bei der Arbitrierung                  *)
  96.   PENDINGERR      = -12; (* auf diesem Handle liegt noch ein Fehler an    *)
  97.   PARITYERROR     = -13; (* Es trat ein Parity-Fehler auf                 *)
  98.  
  99. TYPE
  100.   tHandle = POINTER TO BITSET;      (* Zeiger auf BusFeatures,
  101.                                      * Rest ist Treibersache
  102.                                      *)
  103.  
  104.   tpSCSICmd       = POINTER TO tSCSICmd;
  105.   tSCSICmd        = RECORD
  106.                       handle      : tHandle;    (* das handle des Gerätes *)
  107.                       Cmd         : ADDRESS;    (* Zeiger auf CmdBlock    *)
  108.                       CmdLen      : SHORTCARD;  (* Länge des Cmd-Block    *)
  109.                       Buffer      : ADDRESS;    (* Datenpuffer            *)
  110.                       TransferLen : LONGCARD;   (* Übertragungslänge      *)
  111.                       SenseBuffer : ADDRESS;    (* Puffer (min 18 Bytes)  *)
  112.                       Timeout     : LONGCARD;   (* Timeout in 1/200 sec   *)
  113.                       Flags       : BITSET;     (* für Ablaufwünsche      *)
  114.                     END;
  115.  
  116. CONST
  117.   (* für Flags *)
  118.   Disconnect = 4;  (* Bit 4: Transfer mit Disconnect durchführen *)
  119.  
  120. TYPE
  121.   tpBusInfo = POINTER TO tBusInfo;
  122.   tBusInfo        = RECORD
  123.                       Private : ARRAY[0..31] OF BYTE;
  124.                       (* für den Treiber
  125.                        *)
  126.                       BusName : ARRAY[0..19] OF CHAR;
  127.                       (* zB 'SCSI', 'ACSI', 'PAK-SCSI' *)
  128.                       BusNo   : SHORTCARD;
  129.                         (* Die Identifikationsnummer des Busses
  130.                          * Dient zur Übergabe des gewünschten Busses an
  131.                          * In und Out
  132.                          *)
  133.                       Features: BITSET;
  134.                         (* bis zu 16 Features, die der Bus kann, zB Arbit,
  135.                          * Full-SCSI (alle SCSI-Cmds im Gegensatz zu ACSI)
  136.                          * Target oder Initiator gesteuert
  137.                          * kann alle Adressen bedienen (Stichwort: ACSI-Port
  138.                          * im TT!)
  139.                          * Diese Information ist auch im SCSI-Handle tHandle
  140.                          * wiederzufinden.
  141.                          *)
  142.                       MaxLen  : LONGCARD;
  143.                         (* maximale Transferlänge auf diesem Bus (in Bytes)
  144.                          * entspricht zB bei ACSI der Größe des FRB
  145.                          *)
  146.                     END;
  147.  
  148. CONST
  149.   (* Bus-Features (jeweils die BitNummer!) *)
  150.   cArbit          = 0;  (* auf dem Bus wird arbitriert                        *)
  151.   cAllCmds        = 1;  (* alle Kommandos können grundsätzlich benutzt werden *)
  152.   cTargCtrl       = 2;  (* Das Target steuert den Ablauf (so soll's sein!)    *)
  153.   cTarget         = 3;  (* auf diesem Bus kann ein Target installiert werden  *)
  154.   cCanDisconnect  = 4;  (* auf dem Bus ist Disconnect möglich                 *)
  155.   cScatterGather  = 5;  (* Scatter gather bei virtuellem RAM                  *)
  156.  
  157. TYPE
  158.   tReqData        = RECORD
  159.                       ErrCode     : BYTE;
  160.                       SegNo       : BYTE;
  161.                       SenseKey    : BYTE;
  162.                       InfoByte1   : BYTE;     (* auf ODD ADDRESS!!! *)
  163.                       InfoByte2   : BYTE;
  164.                       InfoByte3   : BYTE;
  165.                       InfoByte4   : BYTE;
  166.                       AddLen      : BYTE;
  167.                       CmdSpec     : LONGCARD; (* Cmd-Specific *)
  168.                       AddSense    : BYTE;
  169.                       AddSenseQual: BYTE;
  170.                       FieldRepl   : BYTE;
  171.                       SKeySpec0   : BYTE;
  172.                       SKeySpec1   : BYTE;
  173.                       SKeySpec2   : BYTE;
  174.                     END;
  175.  
  176.   tpCmd           = POINTER TO ARRAY[0..11] OF BYTE;
  177.  
  178.   tpTargetHandler = POINTER TO tTargetHandler;
  179.   tTargetHandler  = RECORD
  180.                       next        : tpTargetHandler;
  181.                       TSel        : PROCEDURE((* bus *) SHORTCARD,
  182.                                               (* CSB *) SHORTCARD,
  183.                                               (* CSD *) SHORTCARD) : BOOLEAN;
  184.                       TCmd        : PROCEDURE((* bus *) SHORTCARD,
  185.                                               (* Cmd *) tpCmd) : BOOLEAN;
  186.                       TCmdLen     : PROCEDURE((* bus *) SHORTCARD,
  187.                                               (* Cmd *) SHORTCARD) : SHORTCARD;
  188.                       TReset      : PROCEDURE((* bus *) SHORTCARD);
  189.                       TEOP        : PROCEDURE((* bus *) SHORTCARD);
  190.                       TPErr       : PROCEDURE((* bus *) SHORTCARD);
  191.                       TPMism      : PROCEDURE((* bus *) SHORTCARD);
  192.                       TBLoss      : PROCEDURE((* bus *) SHORTCARD);
  193.                       TUnknownInt : PROCEDURE((* bus *) SHORTCARD);
  194.                     END;
  195.  
  196. (*-------------------------------------------------------------------------*)
  197. (*-                                                                       -*)
  198. (*- Funktionen zum SCSI-Zugriff                                           -*)
  199. (*-                                                                       -*)
  200. (*-------------------------------------------------------------------------*)
  201.   tInProc         = PROCEDURE ((* Parms *) tpSCSICmd): LONGINT;
  202.   tOutProc        = PROCEDURE ((* Parms *) tpSCSICmd): LONGINT;
  203.  
  204. (*-------------------------------------------------------------------------*)
  205. (*-                                                                       -*)
  206. (*- Funktionen zur Bus/Gerätesuche                                        -*)
  207. (*-                                                                       -*)
  208. (*-------------------------------------------------------------------------*)
  209.   tInquireSCSIProc= PROCEDURE (   (* what     *) SHORTINT,
  210.                                VAR(* Info     *) tBusInfo) : LONGINT;
  211.  
  212. CONST
  213.   cInqFirst       = 0;
  214.   cInqNext        = 1;
  215.  
  216. TYPE
  217.   tDevInfo        = RECORD
  218.                       Private : ARRAY[0..31] OF BYTE;
  219.                         (* für den Treiber *)
  220.                       Id      : DLONG;
  221.                         (* Ansprechbare Id (muß kein Gerät anwesend sein!) *)
  222.                     END;
  223.  
  224.   (* Funktionen zur Bus/Gerätesuche *)
  225.   tInquireBusProc = PROCEDURE (   (* what     *) SHORTINT,  (* cInqFirst/Next *)
  226.                                   (* BusNo    *) SHORTINT,  (* aus tBusInfo   *)
  227.                                VAR(* Dev      *) tDevInfo) : LONGINT;
  228.  
  229.  
  230.   tCheckDevProc   = PROCEDURE (   (* BusNo    *) SHORTINT,
  231.                                VAR(*$RO*) (* DevNo    *) DLONG,
  232.                                VAR(* Name     *) STRING,
  233.                                VAR(* Features *) BITSET): LONGINT;
  234.  
  235.   tRescanBusProc  = PROCEDURE (   (* BusNo    *) SHORTINT) : LONGINT;
  236.  
  237.  
  238. (* Funktionen zur Verwaltung von Handles *)
  239.   tOpenProc       = PROCEDURE (   (* bus      *) SHORTINT,
  240.                                VAR(*$RO*) (* Id       *) DLONG,
  241.                                VAR(* MaxLen   *) LONGCARD) : LONGINT;
  242.   tCloseProc      = PROCEDURE (   (* handle   *) tHandle) : LONGINT;
  243.   tErrorProc      = PROCEDURE (   (* handle   *) tHandle,
  244.                                   (* rwflag   *) SHORTINT,
  245.                                   (* Error    *) SHORTINT) : LONGINT;
  246. CONST
  247.   cErrRead        = 0;
  248.   cErrWrite       = 1;
  249.     cErrMediach     = 0;
  250.     cErrReset       = 1;  (* kann auch Mediach gemeldet werden *)
  251.  
  252. TYPE
  253.   (* Routinen als Target *)
  254.   tInstallProc    = PROCEDURE ((* bus     *) SHORTCARD,
  255.                                (* Handler *) tpTargetHandler);
  256.   tDeinstallProc  = PROCEDURE ((* Handler *) tpTargetHandler);
  257.   tGetCmdProc     = PROCEDURE ((* bus     *) SHORTCARD,
  258.                                (* Cmd     *) tpCmd) : BOOLEAN;
  259.   tSendDataProc   = PROCEDURE ((* bus     *) SHORTCARD,
  260.                                (* Buffer  *) ADDRESS,
  261.                                (* Len     *) LONGCARD) : BOOLEAN;
  262.   tGetDataProc    = PROCEDURE ((* bus     *) SHORTCARD,
  263.                                (* Buffer  *) ADDRESS,
  264.                                (* Len     *) LONGCARD) : BOOLEAN;
  265.   tSendStatusProc = PROCEDURE ((* bus     *) SHORTCARD,
  266.                                (* Status  *) SHORTCARD) : BOOLEAN;
  267.   tSendMsgProc    = PROCEDURE ((* bus     *) SHORTCARD,
  268.                                (* Msg     *) SHORTCARD) : BOOLEAN;
  269.   tGetMsgProc     = PROCEDURE ((* bus     *) SHORTCARD,
  270.                                VAR (* Msg     *) SHORTCARD) : BOOLEAN;
  271.  
  272.   tScsiCall       = RECORD
  273.                       Version     : SHORTCARD;
  274.  
  275.                       (* Routinen als Initiator *)
  276.                       In          : tInProc;
  277.                       Out         : tOutProc;
  278.                       InquireSCSI : tInquireSCSIProc;
  279.                       InquireBus  : tInquireBusProc;
  280.                       CheckDev    : tCheckDevProc;
  281.                       RescanBus   : tRescanBusProc;
  282.                       Open        : tOpenProc;
  283.                       Close       : tCloseProc;
  284.                       Error       : tErrorProc;
  285.  
  286.                       (* Routinen als Target *)
  287.                       Install     : tInstallProc;
  288.                       Deinstall   : tDeinstallProc;
  289.                       GetCmd      : tGetCmdProc;
  290.                       SendData    : tSendDataProc;
  291.                       GetData     : tGetDataProc;
  292.                       SendStatus  : tSendStatusProc;
  293.                       SendMsg     : tSendMsgProc;
  294.                       GetMsg      : tGetMsgProc;
  295.                       (* globale Variablen *)
  296.                       ReqData     : POINTER TO tReqData;
  297.                     END;
  298.  
  299.  
  300.   tpScsiCall      = POINTER TO tScsiCall;
  301.  
  302. END ScsiDefs.
  303.